<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// - 公有属性和公有方法:设置给实例化对象原型的属性和方法被称作公有属性和公有方法
	{
		// const Box = function(){
		//
		// }
		// Box.prototype.userName = "zhangsan";// 原型属性（公有属性）
		// Box.prototype.fn = function(){
		// 	//  原型方法（公有方法）
		// }
		// const obj = new Box();
		// const obj2 = new Box();
		// const obj3 = new Box();
		// obj.userName = 100;
		// console.log(obj.userName);
		// console.log(obj2.userName);
		// console.log(obj3.userName);
	}
	// - 私有属性和私有方法:声明在构造函数中的变量或函数，被称作为私有属性和私有方法
	{
		// const Box = function(){
		// 	this.userName = "zhangsan";// 私有属性（实例属性）
		// 	this.fn = function(){// 私有方法（实例方法）
		// 		console.log("fn");
		// 	}
		// }
		// const obj = new Box();
		// const obj2 = new Box();
		// obj.userName = "lisi";
		// console.log(obj.userName);
		// console.log(obj2.userName);
		// obj.fn = 1;
		// obj2.fn();
	}
	// - 静态属性和方法:`js`中无需实例化就可以调用的方法叫做静态方法。
	// {
	// 	const Box = function () {
	// 	}
	// 	Box.userName = "zhangsan";// 静态属性
	// 	Box.fn = function () {
	// 		// 静态方法
	// 		console.log(this.userName);
	// 	}
	// 	console.log(Box.userName);
	// 	Box.fn();
	//
	// }
	
	// - 特权方法 :在构造函数内部通过this关键字定义的的方法，可以被实例化的对象调用。
	{
		const Box = function(){
			let a = 1;
			// 特权方法
			this.getA = function(){
				return a;
			}
			// 特权方法
			this.setA = function(v){
				a = v;
			}
		}
		const obj = new Box();
		console.log(obj.getA());
		obj.setA(100);
		console.log(obj.getA());
	}

	// class
	{
	
	}

</script>
</html>